#ifndef EFFECT_H_
#define EFFECT_H_

#include <iostream>
#include <vector>

using namespace std;

/// EFFECT IDS ///
#define EFFECT_DIRECT_DAMAGE 			"effect_dd"
//////////////////

/// EFFECT CATEGORIES ///
#define EFFECT_CATEGORY_INSTANT			"category_instant"
#define EFFECT_CATEGORY_PER_LEVEL		"category_per_level"
/////////////////////////

/**
* An effect that a card could have on the playing field.
* 
* @author dfoelber
**/
class Effect
{
public:
	Effect(string id, string category, string shortText, string longText)
	{
		this->id = id;
		this->category = category;
		this->shortText = shortText;
		this->longText = longText;
	}
public:	
	string GetId() { return id; }
	string GetCategory() { return category; }
	string GetShortText() { return shortText; }
	string GetLongText() { return longText; }
	
private:
	/// The ID of the effect.
	string 			id;
	/// The category of the effect.
	string			category;
	/// The short text of the effect.
	string			shortText;
	/// The long, explanitory text of the effect.
	string			longText;
};

/**
* A direct damage effect.
* 
* @author dfoelber
**/
class DirectDamageEffect : public Effect
{
public:
	DirectDamageEffect(vector<int> damage, string category, string shortText, string longText) :
		Effect(EFFECT_DIRECT_DAMAGE, category, shortText, longText)
	{
		this->damage = damage;
	}
	
	vector<int> GetDamage() { return damage; }
	
private:
	/// The damage value
	vector<int> 			damage;
};
	
#endif /*EFFECT_H_*/
